/*
 * @Author: hanqifeitb 8592865+hanqifeitb@user.noreply.gitee.com
 * @Date: 2025-03-05 13:21:53
 * @LastEditors: hanqifeitb 8592865+hanqifeitb@user.noreply.gitee.com
 * @LastEditTime: 2025-03-05 22:06:11
 * @FilePath: /tianmu/nuxt-font/utils/index.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import katex from 'katex'
import 'katex/dist/katex.min.css' // 导入 KaTeX 样式

export const formatDate = (timestamp) => {
  const date = new Date(timestamp * 1000) // 将时间戳转换为日期对象
  const year = date.getFullYear() // 年
  const month = String(date.getMonth() + 1).padStart(2, '0') // 月（注意：getMonth()返回的月份是从0开始的）
  const day = String(date.getDate()).padStart(2, '0') // 日
  const hours = String(date.getHours()).padStart(2, '0') // 小时
  const minutes = String(date.getMinutes()).padStart(2, '0') // 分钟
  const seconds = String(date.getSeconds()).padStart(2, '0') // 秒
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
}

export const getStorage = (key) => {
  return JSON.parse(window.localStorage.getItem(key))
}

export const setStorage = (key, value) => {
  window.localStorage.setItem(key, JSON.stringify(value))
}

export const phoneHide = (phone) => {
  let reg = /^(1[3-9][0-9])\d{4}(\d{4})$/ // 定义手机号正则表达式
  phone = phone.replace(reg, '$1****$2') // 替换中间四位为星号
  return phone // 返回脱敏后的手机号
}

export const formatSeconds = (seconds) => {
  const hours = Math.floor(seconds / 3600) < 10
  const minutes = Math.floor((seconds % 3600) / 60)
  const remainingSeconds = seconds % 60

  if(seconds == 0){
    return '00'
  }

  if (seconds > 60 * 60) {
    return `${hours}h${minutes}m${remainingSeconds}s`
  } else if ((seconds > 60 || seconds == 60) && seconds < 60 * 60) {
    return `${minutes}m${remainingSeconds}s`
  } else if(seconds < 60) {
    return `${remainingSeconds}s`
  }
}

// 计时器
export const timeStart = (seconds) => {
  const hours = Math.floor(seconds / 3600) < 10 ? '0' + Math.floor(seconds / 3600) : Math.floor(seconds / 3600)
  const minutes =
    Math.floor((seconds % 3600) / 60) < 10 ? '0' + Math.floor((seconds % 3600) / 60) : Math.floor((seconds % 3600) / 60)
  const remainingSeconds = seconds % 60 < 10 ? '0' + (seconds % 60) : seconds % 60

  if (seconds > 60 * 60) {
    return `${hours}:${minutes}:${remainingSeconds}`
  } else if (seconds > 60 && seconds < 60 * 60) {
    return `00:${minutes}:${remainingSeconds}`
  } else {
    return `00:00:${remainingSeconds}`
  }
}

export const changeHTML = (html) => {
  // return html.replace(/<p><br><\/p>/g, '')
  return html.replace(/<p>\s*(<br[^>]*>)\s*<\/p>/gi, '')
  // return html.replace(/<p>\s*<br>\s*<\/p>/g, '');
}

// 富文本数学公式渲染
export const mathHTMLToShow = (html) => {
  if (!html) return ''

  // 创建一个临时容器
  const tempDiv = document.createElement('div')
  tempDiv.innerHTML = html

  // 查找所有公式节点
  const formulaNodes = tempDiv.querySelectorAll('[data-w-e-type="formula"]')
  formulaNodes.forEach((node) => {
    const latex = node.getAttribute('data-value') // 获取 LaTeX 公式
    try {
      // 使用 KaTeX 渲染公式
      const renderedFormula = katex.renderToString(latex, { throwOnError: false })
      node.outerHTML = renderedFormula // 替换公式节点
    } catch (e) {
      console.error('公式渲染失败:', e)
    }
  })

  // 返回渲染后的 HTML
  return tempDiv.innerHTML
}

// 富文本title渲染列表
export const replaceQuestionTitle = (title) => {
  // 删除图片
  let replaceString1 = title.replace(/<img[^>]*>/g, '')
  // 下啦选项标识
  let replaceString2 = replaceString1.replace(/\{【下拉选项标识】\}/g, '')
  // 插入表格标识
  let replaceString3 = replaceString2.replace(/\{【表格插入位置标识】\}/g, '')

  return replaceString3
}

// AI解析数学公式渲染
export const mathHTMLToShowAI = (html) => {
  return html.replace(/\$\$(.*?)\$\$|\$(.*?)\$/g, (match, p1, p2) => {
    const formula = p1 || p2
    try {
      return katex.renderToString(formula, {
        throwOnError: false, // 避免渲染失败时报错
        displayMode: !!p1, // $$...$$ 是独立公式，$...$ 是行内公式
      })
    } catch (e) {
      return match // 如果公式错误，保留原始文本
    }
  })
}

// 数据重排（表格数据重排)
export function sortTable(data) {
  return data.map((item) => {
    // 1. 分离 `field` 键和 `id`
    const { id, qid, tid, ...fields } = item

    // 2. 提取 `field` 并按数字部分排序
    const sortedFields = Object.entries(fields).sort(([keyA], [keyB]) => {
      const numA = parseInt(keyA.replace('field', ''))
      const numB = parseInt(keyB.replace('field', ''))
      return numA - numB // 升序排序
    })

    // 3. 重新组合对象（保持 `id` 在最后）
    return {
      ...Object.fromEntries(sortedFields),
      id, // 将 id 放在最后
      qid,
      tid,
    }
  })
}

// 表格数据中的 '数字字符串' 转换为 '数字'
export function processTable(data){
  return data.map(item => {
    const processedItem = {};
    
    for (const key in item) {
      if (key === 'tid' || key === 'qid') {
        // 保留tid和qid不变
        processedItem[key] = item[key];
      } else {
        const value = item[key];
        // 检查是否是数字字符串（包括小数和负数）
        if (typeof value === 'string' && /^-?\d*\.?\d+$/.test(value.trim())) {
          processedItem[key] = parseFloat(value);
        } else {
          processedItem[key] = value;
        }
      }
    }
    
    return processedItem;
  });
}

export const handlePath = (name) => {
  let names = { gmat: 1, gre: 2, ea: 3 };
  return names[name] || 1;
};
